[INV-BACKEND-030] Создать метод rpc mutateBalances(FIFO_DeductRequest)
Реализация транзакционного gRPC-метода списания сырья и зачисления порций
NoteКраткая карточка задачи
- Репозиторий / Компонент:
fridge-service(Домен INVENTORY). - Контракт метода: gRPC
rpc mutateBalances(FIFO_DeductRequest) returns (MutateResponse). - Ссылка на Метод: Спецификация публикации фактов создания готовых блюд
- Статус: Готово к реализации
- Инструкция по шагам:
- Принять gRPC-запрос мутации остатков. Открыть ACID-транзакцию в
PostgreSQL Fridge DB. - На Шаге 6: Провести скоринг параметра
space_type. - Если
space_type == "HOME"(Шаг 7а): Запустить мягкое каскадное FIFO-списание граммов/литров сырья из таблицыfridge_inventory(сортировка поcreated_at ASC). В случае физической нехватки веса продукта разрешить уход текущего остатка партии в отрицательное значение (знак минус в БД), фиксируя теневую недостачу. - Если
space_type == "OFFICE"(Шаг 7б): Проверить 100% наличие требуемых объемов еды на полках. Если вес хотя бы одной позиции в БД меньше запрашиваемого расхода — выполнитьROLLBACKтранзакции и вернуть вcook-servicegRPC-ошибку уровня приложенияINSUFFICIENT_FUNDS. - На Шаге 8: В рамках той же открытой SQL-транзакции выполнить
INSERTновой порционной записи готового блюда в таблицуfridge_inventory(для последующего частичного “откусывания” или потребления пользователями) и залогировать факт вcooking_history. Зафиксировать транзакцию (COMMIT) и вернуть успешный gRPC-статус.
- Принять gRPC-запрос мутации остатков. Открыть ACID-транзакцию в